#include <stdio.h>
#include <string.h>
#include <stdbool.h>

// 哈希表大小：根据ASCII字符范围（0-127）设置
#define TABLE_SIZE 128

void remove_duplicates(char *str) {
    if (str == NULL || *str == '\0') return;

    bool seen[TABLE_SIZE] = {false}; // 记录字符是否已出现
    int len = strlen(str);
    int j = 0; // 去重后字符串的索引

    for (int i = 0; i < len; i++) {
        unsigned char c = str[i]; // 转为无符号，确保索引在0-127范围内
        if (!seen[c]) {
            seen[c] = true;       // 标记为已出现
            str[j++] = str[i];    // 保留首次出现的字符
        }
    }
    str[j] = '\0'; // 添加字符串结束符
}

// 测试示例
int main() {
    char str[] = "abacbde";
    printf("去重前: %s\n", str);
    remove_duplicates(str);
    printf("去重后: %s\n", str); // 输出 "abcde"
    return 0;
}
